package com.jszc.lottery.common.datatest;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StrUtil {
    /**
     * 空字符串变量
     */
    public static String emptyString = "";

    /**
     * 判断是否为 null 或者 为空
     */
    public static boolean isTEpt(Object content) {
        if (content == null) return true;
        if (espNull(content).isEmpty()) {
            return true;
        }
        if (espNull(content).equals("null")) {
            return true;
        }
        return false;
    }

    /**
     * 拼接数组字符串变成一个字符串
     */
    public static String join(String join, String... strArr) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < strArr.length; i++) {
            if (i == (strArr.length - 1)) {
                sb.append(strArr[i]);
            } else {
                sb.append(strArr[i]).append(join);
            }
        }
        return new String(sb);
    }

    /**
     * 过滤null字符和两边的空格，或末尾空白字符 ,（默认裁剪字符串前后空格）
     */
    public static String espNull(Object content) {
        return espNull(content, true);
    }

    /**
     * 过滤null字符和两边的空格，或末尾空白字符
     */
    public static String espNull(Object content, boolean useTrim) {
        if (content == null) return "";
        if (useTrim) {
            return content.toString().trim();
        } else {
            return content.toString();
        }
    }

    /**
     * 左补位，右对齐
     *
     * @param oriStr 原字符串
     * @param len    目标字符串长度
     * @param alexin 补位字符
     * @return 目标字符串
     */
    public static String padLeft(String oriStr, int len, String alexin) {
        String str = "";
        int strlen = oriStr.length();
        if (strlen < len) {
            for (int i = 0; i < len - strlen; i++) {
                str = str + alexin;
            }
        }
        str = str + oriStr;
        return str;
    }

    /**
     * 右补位，左对齐
     *
     * @param oriStr 原字符串
     * @param len    目标字符串长度
     * @param alexin 补位字符
     * @return 目标字符串
     */
    public static String padRight(String oriStr, int len, String alexin) {
        String str = "";
        int strlen = oriStr.length();
        if (strlen < len) {
            for (int i = 0; i < len - strlen; i++) {
                str = str + alexin;
            }
        }
        str = oriStr + str;
        return str;
    }

    /**
     * 截取字符串
     *
     * @param value 需截取的字符串
     * @param num   截取字符数
     * @return
     */
    public static String SafeSub(String value, int num) {
        return SafeSub(value, num, false);
    }

    /**
     * 截取字符串
     *
     * @param value   需截取的字符串
     * @param num     截取字符数
     * @param reverse 是否反向
     * @return
     */
    public static String SafeSub(String value, int num, boolean reverse) {
        value = espNull(value);
        if (value.length() <= num) return value;
        if (!reverse) {
            return value.substring(0, num);
        } else {
            return value.substring(value.length() - num, value.length());
        }
    }

    //type = 1 左切，0 左右切，-1右切
    private static String trim(String stream, String trimstr,int type){
        // null或者空字符串的时候不处理
        if (stream == null || stream.length() == 0 || trimstr == null || trimstr.length() == 0) {
            return stream;
        }

        // 结束位置
        int epos = 0;

        // 正规表达式
        String regpattern = "[" + trimstr + "]*+";
        Pattern pattern = Pattern.compile(regpattern, Pattern.CASE_INSENSITIVE);

        if(type <= 0) {
            // 去掉结尾的指定字符
            StringBuffer buffer = new StringBuffer(stream).reverse();
            Matcher matcher = pattern.matcher(buffer);
            if (matcher.lookingAt()) {
                epos = matcher.end();
                stream = new StringBuffer(buffer.substring(epos)).reverse().toString();
            }
        }

        if(type>=0) {
            // 去掉开头的指定字符
            Matcher matcher = pattern.matcher(stream);
            if (matcher.lookingAt()) {
                epos = matcher.end();
                stream = stream.substring(epos);
            }
        }

        // 返回处理后的字符串
        return stream;
    }
    /*  去掉指定字符串的开头和结尾的指定字符
    * @param stream 要处理的字符串
    * @param trimstr 要去掉的字符串
    * @return 处理后的字符串
    */
    public static String trim(String stream, String trimstr) {
        return trim(stream,trimstr,0);
    }

    public static String trimLeft(String stream, String trimstr) {
        return trim(stream,trimstr,1);
    }

    public static String trimRight(String stream, String trimstr) {
        return trim(stream,trimstr,-1);
    }
}
